package marketplace.jpa.interfaces;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import marketplace.jpa.datas.DataCategoria;
import marketplace.jpa.datas.DataContenidoDigital;
import marketplace.jpa.datas.DataSubcategoria;
import marketplace.jpa.datas.DataVersion;

@Remote
public interface IContenidoDigitalDAO {
	

	//// CONTENIDO DIGITAL /////////////////////////////////////////////////////////////////
	
	public abstract boolean existeContenidoDigital(int id) throws Exception;

	public abstract boolean existeContenidoDigital(String nombre) throws Exception;	
	
	public abstract boolean guardarContenidoDigital(DataContenidoDigital dcd) throws Exception;

	public abstract int guardarContenidoDigital(String nombre, String descripcion, String videos, String subcategoria, String propietario);	
	
	public abstract void modificarContenidoDigital(DataContenidoDigital cd) throws Exception;
	
	public abstract void eliminarContenidoDigital(int id) throws Exception;

	public abstract DataContenidoDigital obtenerContenidoDigital(int id) throws Exception;

	public abstract List<DataContenidoDigital> getContenidoDigitales() throws Exception;
	
	public abstract List<DataContenidoDigital> getContenidoDigitalesProveedor(String mail) throws Exception;
	
	
	//// CATEGORIA /////////////////////////////////////////////////////////////////
	
	public abstract boolean existeCategoria(String nombre) throws Exception;

	public abstract boolean guardarCategoria(DataCategoria da) throws Exception;

	public abstract void modificarCategoria(DataCategoria da) throws Exception;
	
	public abstract void eliminarCategoria(String nombre) throws Exception;
	
	public abstract List<DataCategoria> getCategorias() throws Exception;

	public abstract DataCategoria obtenerCategoria(String c) throws Exception;

	
	
	//// SUBCATEGORIA /////////////////////////////////////////////////////////////////
	
	public abstract boolean existeSubCategoria(String scnombre, String categoria) throws Exception;

	public abstract boolean guardarSubCategoria(DataSubcategoria dsc) throws Exception;

	public abstract void modificarSubCategoria(DataSubcategoria dsc) throws Exception;
	
	public abstract void eliminarSubCategoria(String sc) throws Exception;
	
	public abstract List<DataSubcategoria> getSubCategorias() throws Exception;
	
	public abstract List<DataSubcategoria> getSubCategoriasPorCategoria(String categoria) throws Exception;

	public abstract DataSubcategoria obtenerSubCategoria(String scnombre) throws Exception;

	
	//// VERSION //////////////////////////////////////////////////////////////////////	
	
	public abstract boolean existeVersion(int id) throws Exception;

	public abstract boolean existeVersionNumero(int idContenido, int numero) throws Exception;

	public abstract int guardarVersion(int numero, String nombre, Double precio, String estado, String archivo, Double tamanio, int idContenido);

	public abstract List<DataVersion> getVersiones(int idContenido) throws Exception;

	public abstract void modificarVersion(DataVersion Ver) throws Exception;

	public abstract void eliminarVersion(int id) throws Exception;

	public abstract List<DataVersion> getVersiones() throws Exception;

	public abstract DataVersion obtenerVersion(int id) throws Exception;

	public abstract int getUltimaVersionAutorizada(int idContenido) throws Exception;

	public abstract int getCantidadDescargasContenidoDigital(int idContenido) throws Exception;

	public abstract DataVersion obtenerDataUltimaVersionAutorizada(int idContenido) throws Exception;

	public abstract List<DataContenidoDigital> getContenidosConVersionesAprobadas() throws Exception;

	public abstract void eliminarVersionesContenidoDigital(int idContenido);

	public abstract void eliminarSubcategoriasCategoria(String categoria);

	public abstract void guardarRegistroDeAutorizacion(String administrador, int idVersion, String observacion)  throws Exception;

	public abstract List<DataContenidoDigital> obtenerBusqueda(String valor);

	public abstract boolean existeSubCategoriaNombre(String nombre);

}
